'use strict';

module.exports = (options, app) => {
  return async function(ctx, next) {
    try {
      await next();
    } catch (err) {
      // 抛出错误事件 原因：这里只是做统一的错误应答，只是应答给前端，但是并不是我只应答给前端，后端不做其他的处理，比如我在服务器的底层我要把把error写个错误日志。所以这时我要把错误上抛去记录日志的，不做这个的话错误在底层是感知不到的。
      app.emit('error', err, this);

      const status = err.status || 500;
      const error = status === 500 && app.config.env === 'prod' ?
        'Internal Server Error!' :
        err.message;

      ctx.body = {
        code: status,
        message: error,
      };

      if (status === 422) {
        ctx.body.detail = err.errors;
      }

      ctx.status = 200;
    }
  };
};
